# 食人花敌人脚本 - 负责攻击玩家和处理死亡
extends StaticBody2D

# === 玩家相关变量 ===
var player = null  # 存储玩家引用
var can_hurt: bool = true  # 伤害冷却状态

# === 配置参数 ===
@export var hurt_cooldown: float = 1.5  # 伤害冷却时间（秒）
@export var health = 5  # 生命值
@export var death_sound: AudioStream  # 死亡音效
@export var item : CollectableItem  # 掉落物品

func _ready() -> void:
	# 添加到敌人分组，便于统一管理
	add_to_group("enemy")

# 处理受到伤害
func take_damage(damage: int):
	health -= damage  # 减少生命值
	
	# 生命值归零时死亡
	if health <= 0:
		# 播放死亡音效
		var audio_player = AudioStreamPlayer2D.new()
		audio_player.stream = death_sound
		add_child(audio_player)
		audio_player.play()
		
		# 创建延迟销毁计时器
		var death_timer = Timer.new()
		add_child(death_timer)
		death_timer.wait_time = 0.5  # 1秒后销毁，给音效播放时间
		death_timer.one_shot = true
		death_timer.timeout.connect(func(): 
			print("死亡延迟时间到，销毁食人花")
			queue_free()  # 销毁节点
		)
		death_timer.start()
		
		# 立即隐藏并禁用，视觉上显示死亡
		$Sprite2D.hide()
		$CollisionShape2D.set_deferred("disabled", true)
		set_process(false)  # 停止所有处理
		playercollect()

# 玩家进入攻击范围
func _on_area_2d_body_entered(body: Node2D) -> void:
	if body.name == "Player":
		player = body
		if can_hurt:
			_hurt_player()  # 立即攻击一次

# 每帧检测是否可攻击玩家
func _process(delta: float) -> void:
	if player != null and can_hurt:
		_hurt_player()

# 攻击玩家
func _hurt_player() -> void:
	if player and can_hurt:
		player.get_hurt()  # 让玩家受伤
		can_hurt = false  # 进入冷却
		
		# 冷却计时器
		var timer = Timer.new()
		add_child(timer)
		timer.wait_time = hurt_cooldown
		timer.one_shot = true
		timer.timeout.connect(func(): can_hurt = true)  # 冷却结束
		timer.timeout.connect(timer.queue_free)  # 销毁计时器
		timer.start()

# 玩家离开攻击范围
func _on_area_2d_body_exited(body: Node2D) -> void:
	if body.name == "Player":
		player = null

# 玩家收集掉落物品
func playercollect():
	# 如果player为null，尝试通过组获取玩家引用
	if player == null:
		player = get_tree().get_first_node_in_group("player")
	
	# 如果成功获取到玩家引用，则调用收集方法
	if player != null:
		player.collect(item)
	else:
		print("警告：无法获取玩家引用，物品收集失败")
